///////////////////////////////
// Analizador léxico C
///////////////////////////////

header {
	package practpl.cuatro;
}



class AnalexC extends Lexer;

	options {
		k = 2;
		charVocabulary = '\3'..'\377';
	 	caseSensitive = false;
	}

	tokens{
		
		//numeros
		LIT_REAL;
		LIT_ENTERO;
		
		// tipos
		INT = "int";
		CHAR = "char";
	
		// instrucciones
		IF = "if";
		WHILE = "while";
		VOID = "void";
		
	}

 	protected NUEVA_LINEA: "\r\n" {newline();};
	BLANCO: (' '|'\t'|NUEVA_LINEA) {$setType(Token.SKIP);};
	
	protected DIGITO: '0'..'9';
	NUMERO : ((DIGITO)+ '.') => (DIGITO)+ '.' (DIGITO)* {$setType(LIT_REAL);} | (DIGITO)+ {$setType(LIT_ENTERO);};
	
	protected LETRA: ('a'..'z');
	IDENT : (LETRA)((DIGITO)|(LETRA))*;
	
	OPERADOR: '+'|'-'|'/'|'*'|'\\';
	PARENTESIS: '('|')';
	LLAVES: '{' | '}';
	ANGULOS: '<' | '>';
	SEPARADOR: ';' | ',';
	ASIGNAR : ":=";
	IGUAL : '=';
	COMILLAS : '"';
	PORCENTAJE: '%';
	AND : '&';
	COMENTARIO: ( "/*" ('*' ~('/') | ~ ('*') )* "*/" ) NUEVA_LINEA  {$setType(Token.SKIP);};
	COMENTARIO2: "//" (options {greedy = false;} : .)* NUEVA_LINEA {$setType(Token.SKIP);};
	
	